我在我的脚本中的几个地方使用数据库名称,我希望能够快速更改它,所以我正在寻找这样的东西:
DECLARE @DBNAME VARCHAR(50)
SET @DBNAME = 'TEST'
CREATE DATABASE @DBNAME
GO
ALTER DATABASE @DBNAME SET COMPATIBILITY_LEVEL = 90
GO
ALTER DATABASE @DBNAME SET RECOVERY SIMPLE
GO
Run Code Online (Sandbox Code Playgroud)
但它不起作用.那么编写这段代码的正确方法是什么?
我想在Postgres函数中传递一个表名作为参数.我试过这段代码:
CREATE OR REPLACE FUNCTION some_f(param character varying) RETURNS integer
AS $$
BEGIN
IF EXISTS (select * from quote_ident($1) where quote_ident($1).id=1) THEN
return 1;
END IF;
return 0;
END;
$$ LANGUAGE plpgsql;
select some_f('table_name');
Run Code Online (Sandbox Code Playgroud)
我得到了这个:
ERROR: syntax error at or near "."
LINE 4: ...elect * from quote_ident($1) where quote_ident($1).id=1)...
^
********** Error **********
ERROR: syntax error at or near "."
Run Code Online (Sandbox Code Playgroud)
以下是更改为此时出现的错误select * from quote_ident($1) tab where tab.id=1:
ERROR: column tab.id does not exist
LINE 1: ...T EXISTS …Run Code Online (Sandbox Code Playgroud) 假设,我有一个testdb在测试服务器中命名的数据库.此外,我在prod服务器中有一个名为proddb的数据库.
现在我想从proddb数据库中选择testdb数据库表的数据.
我怎么能这样做SQL Server?
另外,我可以用做数据库链接的预言.但是如何在SQL Server中做到这一点?
简而言之.我有两个简单的助手:
private SqlCommand CreateCommand(string text)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = connection;
cmd.CommandType = CommandType.Text;
cmd.CommandText = text;
return cmd;
}
void SetParameter(SqlCommand cmd, string p, string dbName)
{
cmd.Parameters.Add(p, SqlDbType.NVarChar);
cmd.Parameters[p].Value = dbName;
}
Run Code Online (Sandbox Code Playgroud)
这执行OK:
var cmd = CreateCommand("CREATE DATABASE Demo "+
@"ON (FILENAME = N'c:\demo_data.mdf') "+
@"LOG ON (FILENAME = N'c:\demo_data.mdf.LDF') "+
"FOR ATTACH " +
"GO");
cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
但这不是:
string dataBaseAttachText = "CREATE DATABASE @dbname " +
"ON (FILENAME = @filename) " +
"LOG ON (FILENAME …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个动态数据库创建脚本.
有很多步骤,我们经常创建这个数据库,所以脚本看起来像这样.
DECLARE @databaseName nvarchar(100) = 'DatabaseName'
EXEC('/*A lot of database creation code built off of @databaseName*/')
Run Code Online (Sandbox Code Playgroud)
除了我们在此数据库中创建的一个视图外,这一切都很好.
我理解的问题源于SQL中关于EXEC命令的三个规则
所以这里有三件我尝试过但没有成功的事情.
--Result: Error message, "'CREATE VIEW' must be the first statement in a query batch"
EXEC
('
USE [' + @databaseName + ']
CREATE VIEW
')
Run Code Online (Sandbox Code Playgroud)
有什么建议?我认为这应该是一个常见的用例,但谷歌无法帮助我.
我想将数据库名称分配给声明的变量,这就是我已经尝试过的方式:
DECLARE @DBname VARCHAR(100)
SET @DBname = 'PatientTurningSystem'
SELECT TABLE_NAME, TABLE_TYPE
FROM @DBname.INFORMATION_SCHEMA.TABLES
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
消息 102,级别 15,状态 1,过程 SP_TableDeatails,第 8 行
'.' 附近的语法不正确
USE master
GO
DECLARE @DbName nvarchar(MAX)
SET @DbName = N'DataBase'
ALTER DATABASE @DbName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE @DbName SET OFFLINE WITH NO_WAIT
GO
ALTER DATABASE @DbName SET ONLINE
GO
ALTER DATABASE @DbName
SET MULTI_USER
GO
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用 EXEC,但它有点难看......
sql-server ×6
dynamic-sql ×2
sql ×2
ado.net ×1
c# ×1
database ×1
dml ×1
function ×1
identifier ×1
plpgsql ×1
postgresql ×1
t-sql ×1