SQL Server中用单.sql脚本创建多表的语法问题及脚本验证
SQL Server部署脚本问题分析及修正
你的原脚本存在几处语法和逻辑错误,导致执行时出现DATABASE、SCHEMA相关报错,具体问题和修正方案如下:
原脚本的错误点
USE语句语法错误:use database Test_Dev不符合SQL Server语法,切换数据库无需database关键字。- 表未归属目标Schema:创建表时未指定
test_schema,默认会放到dboSchema下,后续对test_schema的授权无法作用于这些表。 - 重复创建表:连续两次执行
create table test2,会触发“对象名已存在”的错误。 - 用户引号使用不当:授权语句里的双引号
"test_user"在SQL Server默认配置下会被识别为标识符而非用户名,导致授权失败。
修正后的可用脚本
-- 切换到目标数据库 USE Test_Dev GO -- 创建自定义Schema CREATE SCHEMA test_schema GO -- 在test_schema下创建数据表 CREATE TABLE test_schema.test1(tname1 varchar(50), place1 varchar(100)) GO CREATE TABLE test_schema.test2(tname2 varchar(50), place2 varchar(100)) GO -- 为用户授予Schema权限 GRANT SELECT, INSERT, DELETE ON SCHEMA::test_schema TO 'test_user' GO
修正说明
- 简化
USE语句为USE Test_Dev,符合SQL Server语法规范。 - 所有表创建时添加
test_schema.前缀,确保表归属到目标Schema,让后续的权限设置生效。 - 删除重复的
test2表创建语句,避免对象冲突。 - 将授权语句中的双引号改为单引号,适配SQL Server默认的标识符引用规则;如果用户名无特殊字符,也可以直接写
test_user无需引号。
内容的提问来源于stack exchange,提问作者Vijesh1985
相关产品推荐
相关产品推荐

